﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace Wolfy.NetDisk.Core.Utils
{
    /// <summary>
    /// 文件已存在，重命名操作类
    /// </summary>
    public class ReNameHelper
    {
        /// <summary>
        /// 对文件进行重命名
        /// </summary>
        /// <param name="strFilePath"></param>
        /// <returns></returns>
        public static string FileReName(string strFilePath)
        {
            //判断该文件是否存在，存在则返回新名字，否则返回原来的名
            if (!File.Exists(strFilePath))
            {
                return Path.GetFileName(strFilePath);
            }
            else
            {
                //获取不带扩展名的文件名称
                string strFileNameWithoutExtension = Path.GetFileNameWithoutExtension(strFilePath);
                //获取扩展名
                string strFileExtension = Path.GetExtension(strFilePath);
                //获取目录名
                string strDirPath = Path.GetDirectoryName(strFilePath);
                //以文件名开头和结尾的正则
                string strRegex = "^" + strFileNameWithoutExtension + "(\\d+)?";
                Regex regex = new Regex(strRegex);
                //获取该路径下类似的文件名
                string[] strFilePaths = Directory.GetFiles(strDirPath, "*" + strFileExtension).Where(path => regex.IsMatch(Path.GetFileNameWithoutExtension(path))).ToArray();
                //获得新的文件名
                return strFileNameWithoutExtension + "(" + (strFilePaths.Length + 1).ToString() + ")" + strFileExtension;
            }
        }
        /// <summary>
        /// 文件夹已存在，重命名
        /// </summary>
        /// <param name="strFolderPath"></param>
        /// <returns></returns>
        public static string FolderReName(string strFolderPath)
        {
            //判断该文件夹是否存在，存在则返回新名字，否则返回原来的名
            if (!Directory.Exists(strFolderPath))
            {
                return Path.GetFileName(strFolderPath);
            }
            else
            {
                //获取文件夹名
                string strFolderName = Path.GetFileName(strFolderPath);
                //获取目录名
                string strDirPath = Path.GetDirectoryName(strFolderPath);
                //以文件夹名开头和结尾的正则
                string strRegex = "^" + strFolderName + "(\\d+)?";
                Regex regex = new Regex(strRegex);
                //获取该路径下类似的文件夹名
                string[] strFilePaths = Directory.GetDirectories(strDirPath).Where(path => regex.IsMatch(Path.GetFileName(path))).ToArray();
                //获得新的文件名
                return strFolderName + "(" + (strFilePaths.Length + 1).ToString() + ")";
            }
        }

    }
}
